/**
 * 作者: heweiping
 * 日期: 2025-04-15 15:00:02
 * 备注: 用户万能活动数据
 */
package com.motu.monstercity.server.game.userdata;

import com.motu.monstercity.module.common.servermanager.ServerManager;
import com.motu.monstercity.server.game.commondata.act.Act;
import com.motu.monstercity.server.game.commondata.act.ActConstant;
import com.motu.monstercity.server.game.commondata.bag.ItemId;
import com.motu.monstercity.server.game.commondata.rank.RankConstant;
import com.motu.monstercity.server.game.log.MotuLogManager;
import com.motu.monstercity.server.game.logic.ActConventionManager;
import com.motu.monstercity.server.game.logic.ActManager;
import com.motu.monstercity.server.game.logic.GameUser;
import com.motu.monstercity.server.game.logic.RankManager;

public class UserActConvention extends UserActConventionModel {
    public UserActConvention() {
        super();
    }

    /**
     * 活动重置
     * 1、重置活动数据，放在这边重置，而不放在玩家每天首次登录重置，是因为玩家可能跨天不下线，更新就不是实时的。
     * 2、道具回收转换，放在这里转换，是因为该活动可能连续开启，导致旧数据不能及时回收转换。
     */
    public void reset() {
        boolean isUpdate = false;
        if (getActId() == 0) { // 首次参加
            isUpdate = true;
        }else if (getActId() > 0) { // 活动是否失效
            Act act = ActManager.getAct(getActId());
            if (act == null || !act.isStart()) { // 预览期 也更新。尽可能少获取 UserInfo
                isUpdate = true;
            }
        }
        if (isUpdate) {
            UserInfo userInfo = GameUser.getUserInfo(getId());
            Act act = ActManager.getActByType(ActConstant.ACT_TYPE_1001, userInfo.getServerId());
            ActConventionManager.recycleItemConvertReward(userInfo, this, act); // 万能活动(道具回收转换)

            if (act != null &&  getActId() != act.getId()) {
                putActId(act.getId());
                putScore(0);
                putGroupId(Integer.parseInt(act.getParam()));
                update();
            }
        }

    }
    // 记录日志并增加积分
    public void addScore(UserInfo userInfo, int num, Object... params) {
        Act act = ActManager.getActByType(ActConstant.ACT_TYPE_1001, userInfo.getServerId());
        if (act == null || !act.isCloseTime()) {// 活动期间
            return;
        }
        long balance = getScore();// 当前余额
        long dbid = 0;
        MotuLogManager.logItemIncome(userInfo, ItemId.TYPE_ACT_CONVENTION_SCORE, dbid, balance, num, params);
        super.addScore(num);
        RankManager.updateRank(RankConstant.ACTIVITY_RANK_CONVENTION, userInfo.getServerId(), userInfo.getId(), getScore(), String.valueOf(act.getId()));// 全量更新排行榜
        RankManager.updateRank(RankConstant.ACTIVITY_CROSS_RANK_CONVENTION, ServerManager.getWarZoneId(userInfo.getServerId()), userInfo.getId(), getScore(), String.valueOf(act.getId()));// 全量更新跨服排行榜
    }
}
